var licount = 0;
var wiki_todos = new Array();
var todools = new Array();

Event.observe(window, "load", function() { 
	if(todo_do_kickoff) todo_kickoff();
});

function todo_kickoff() {
	todo_do_kickoff = true;
	wiki_todos.each(function(e) {
		todoid = e[0];
		pagename = e[1];
		todoname = e[2];
		//todo_start(e[0], e[1], e[2]);

		var todool = $(todoid);
		while(todool != null && todool.tagName != "OL" && todool.tagName != "UL") {
			todool = todool.nextSibling;
		}
		if(todool == null) {
			new Insertion.After(todoid, "<ul></ul>");
			todool = $(todoid).nextSibling;
		}
		todool.id = "ol_" + todoid;
		todool.className = "todo-list";
		todolis = todool.getElementsByTagName("li");
		$A(todolis).each( function(li) {
			todo_litocheckoff(li, todool.id, pagename, todoname);
		});
		todools.push(new Array(e[0],e[1],e[2],todool));
	});
	todools.each(function(e) {
		todoid = e[0];
		pagename = e[1];
		todoname = e[2];
		todool = e[3];
		new Insertion.After(todool, "<form onsubmit=\"todo_additem($(\'ol_" + todoid + "\'), \'newtodo_" + todoid + "\', \'" + pagename + "\', \'" + todoname + "\');return false;\" class=\"todo-newform\"><input type=\"text\" id=\"newtodo_" + todoid + "\"/><input type=\"submit\" name=\"addtodo\" value=\"Add\" /></form>");
		Sortable.create(
			todool.id, 
			{
				handle:"todo-handle",
				onUpdate: function() {todo_updatelist($("ol_" + e[0]), e[1], e[2]);},
				containment: todools.pluck(3)
			}
		);
	});
}

function todo_litocheckoff(li, todoid, pagename, todoname) {
	li.innerHTML = "<input type=\"checkbox\" class=\"todo-checkoff\" onclick=\"todo_doitem(this.parentNode, \'" + pagename + "\', \'" + todoname + "\');\"/> <span class=\"todo-handle\">" + li.innerHTML + "</span>";// <img src=\"' . $rewrite->get_link(array('page'=>'plugins/todos/handle.gif')) . '\" class=\"todo-handle\" />";
	li.id = todoid + "_" + (licount++);
}

function todo_additem(todo, todofld, page, todoname) {
	var node = Builder.node("li", $F(todofld));
	todo.appendChild(node);
	todo_litocheckoff(node, todo.id, page, todoname);
	Sortable.create(
		todo, 
		{
			handle:"todo-handle",
			onUpdate: function() {todo_updatelist($(todo.id), page, todoname);},
			containment: todools.pluck(3)
		}
	);
	$(todofld).value = "";
	todo_updatelist(todo, page, todoname);
}

function todo_doitem(done, page, todoname) {
	done.innerHTML = '<s>'+done.innerHTML+'</s>';
	Effect.DropOut(done, {
		afterFinish: function(effect){
			var element = effect.effects[0].element;
			var todool = element.parentNode;
			Element.remove(element);
			todo_updatelist(todool, page, todoname);
		}
	});
}

function todo_updatelist(todool, page, todoname) {
	todolis = todool.getElementsByTagName("li");
	var pars = "handler=todo&page=" + page + "&todoname=" + todoname;
	var itemscount = 0;
	if($A(todolis).length == 0) {
	}
	else {
		var member = (typeof($A(todolis)[0].textContent) == 'undefined') ? "innerText" : "textContent";
		$A(todolis).pluck(member).each(function(e){pars += "&item[" + (itemscount++) + "]=" + e;});
	}
	var myAjax = new Ajax.Request(
	ajaxurl, 
	{
		method: "post", 
		parameters: pars
	});
}
